-
Notifications
You must be signed in to change notification settings - Fork 173
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve ASSERT
macro, fix linux file paths in Taskfile
and hopefully fix the windows release
#1295
Conversation
goalc/regalloc/Allocator.cpp
Outdated
printf("SPILLING FAILED BECAUSE WE COULDN'T FIND A TEMP REGISTER!\n"); | ||
ASSERT(false); | ||
ASSERT_MSG(false, | ||
fmt::format("SPILLING FAILED BECAUSE WE COULDN'T FIND A TEMP REGISTER!")); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you could drop the fmt::format
here
goalc/emitter/CodeTester.cpp
Outdated
@@ -133,8 +133,7 @@ void CodeTester::init_code_buffer(int capacity) { | |||
code_buffer = (u8*)mmap(nullptr, capacity, PROT_EXEC | PROT_READ | PROT_WRITE, | |||
MAP_ANONYMOUS | MAP_PRIVATE, 0, 0); | |||
if (code_buffer == (u8*)(-1)) { | |||
printf("[CodeTester] Failed to map memory!\n"); | |||
ASSERT(false); | |||
ASSERT_MSG(false, fmt::format("[CodeTester] Failed to map memory!")); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
and here
goalc/emitter/CodeTester.h
Outdated
@@ -91,13 +91,19 @@ class CodeTester { | |||
/*! | |||
* Get the name of the given register, for debugging. | |||
*/ | |||
std::string reg_name(Register x) { return m_info.get_info(x).name; } | |||
std::string reg_name(Register x) { | |||
return m_info.get_info(x).name; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hm, I think the formatting isn't right here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah i have no idea whats going on, my local clang formatter in CLI has formatted things differently than the same command in CI / Visual Studio....
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PS C:\Users\xtvas\Repositories\opengoal\jak-project> clang-format -verbose .\goalc\emitter\CodeTester.h
...
/*!
* Get the name of the given register, for debugging.
*/
std::string reg_name(Register x) {
return m_info.get_info(x).name;
}
Any ideas on debugging what's going on?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It should find this file:
https://github.com/open-goal/jak-project/blob/master/.clang-format
I think you can specify the file with -style=<path-to-clang-format-file>
but it should automatically go up directories until it finds the file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh I am wrong. The right thing is:
-style=file
(literally put the word file
there)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
here's my output. the ColumnLimit: 100
is something that's different from the default config.
---
Language: Cpp
AccessModifierOffset: -1
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: true
BinPackParameters: false
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 100
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^<ext/.*\.h>'
Priority: 2
SortPriority: 0
- Regex: '^<.*\.h>'
Priority: 1
SortPriority: 0
- Regex: '^<.*'
Priority: 2
SortPriority: 0
- Regex: '.*'
Priority: 3
SortPriority: 0
IncludeIsMainRegex: '([-_](test|unittest))?$'
IncludeIsMainSourceRegex: ''
IndentCaseLabels: true
IndentGotoLabels: true
IndentPPDirectives: None
IndentWidth: 2
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Never
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Left
RawStringFormats:
- Language: Cpp
Delimiters:
- cc
- CC
- cpp
- Cpp
- CPP
- 'c++'
- 'C++'
CanonicalDelimiter: ''
BasedOnStyle: google
- Language: TextProto
Delimiters:
- pb
- PB
- proto
- PROTO
EnclosingFunctions:
- EqualsProto
- EquivToProto
- PARSE_PARTIAL_TEXT_PROTO
- PARSE_TEST_PROTO
- PARSE_TEXT_PROTO
- ParseTextOrDie
- ParseTextProtoOrDie
CanonicalDelimiter: ''
BasedOnStyle: google
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
Standard: Auto
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseCRLF: false
UseTab: Never
...
common/util/Assert.cpp
Outdated
int line, | ||
const char* function, | ||
const char* msg) { | ||
if ((msg != NULL) && (msg[0] == '\0')) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this condition should be if( !msg || msg[0] == '\0')
so we don't try to print a message if its null.
fprintf(stderr, "Assertion failed: '%s'\n\tMessage: %s\n\tSource: %s:%d\n\tFunction: %s\n", | ||
expr, msg, file, line, function); | ||
} | ||
fflush(stdout); // ensure any stdout logs are flushed before we terminate |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if you're paranoid, you could put fflush(stderr);
as well
common/util/Assert.h
Outdated
@@ -3,16 +3,23 @@ | |||
* Custom ASSERT macro | |||
*/ | |||
|
|||
#include "third-party/fmt/core.h" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we remove this? I'd rather not include libfmt
in more places than we need because it's a huge header-only library that increases compile times. I think we can just put #include <string>
instead.
common/util/Assert.h
Outdated
|
||
#define ASSERT_MSG(EXPR, STR) \ | ||
(void)((EXPR) || \ | ||
(private_assert_failed(#EXPR, __FILE__, __LINE__, __PRETTY_FUNCTION__, STR.c_str()), 0)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
using .c_str()
in the macro like this means it won't work for plain string constants. Maybe we could remove the .c_str()
here and have a second private_assert_failed
that takes const std::string& msg
. This overload of private_assert_failed
could then call the const char* msg
version.
decompiler/data/tpage.cpp
Outdated
@@ -276,8 +276,7 @@ Texture read_texture(ObjectFileData& data, const std::vector<LinkedWord>& words, | |||
|
|||
auto kv = psms.find(tex.psm); | |||
if (kv == psms.end()) { | |||
printf("Got unsupported texture 0x%x!\n", tex.psm); | |||
ASSERT(false); | |||
ASSERT_MSG(false, fmt::format("Got unsupported texture 0x{0:x}!", tex.psm)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe this should be 0x{:x}
?
For future reference, the regex i used to find the instances -
(.*print.*\n){1,5}.*ASSERT\(false\)
Adds a
ASSERT_MSG
macro which you can pass astd::string
into to be printed, or a string literal. Will also flush stdout and stderr beforeabort
ing now -- which should hopefully make logging more consistent.Hopefully fixed the windows release and
task
commands on linux should now perform as expected.