diff --git a/clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp b/clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp --- a/clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp +++ b/clang-tools-extra/clang-tidy/altera/IdDependentBackwardBranchCheck.cpp @@ -114,7 +114,7 @@ const VarDecl *Variable) { // Record that this variable is thread-dependent. IdDepVarsMap[Variable] = - IdDependencyRecord(Variable, Variable->getBeginLoc(), + IdDependencyRecord(Variable, Statement->getBeginLoc(), Twine("assignment of ID-dependent variable ") + Variable->getNameAsString()); } diff --git a/clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp b/clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp --- a/clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/altera/id-dependent-backward-branch.cpp @@ -34,6 +34,15 @@ // CHECK-NOTES: :[[@LINE-1]]:12: warning: backward branch (do loop) is ID-dependent due to variable reference to 'ThreadID' and may cause performance degradation [altera-id-dependent-backward-branch] // CHECK-NOTES: :[[@LINE-12]]:3: note: assignment of ID-dependent variable ThreadID + int ThreadIDAssigned = 0; + ThreadIDAssigned = get_local_id(0) * 2; + + for (int i = 0; i < ThreadIDAssigned; i++) { + // CHECK-NOTES: :[[@LINE-1]]:19: warning: backward branch (for loop) is ID-dependent due to variable reference to 'ThreadIDAssigned' and may cause performance degradation [altera-id-dependent-backward-branch] + // CHECK-NOTES: :[[@LINE-4]]:3: note: assignment of ID-dependent variable ThreadIDAssigned + accumulator++; + } + struct { int IDDepField; } Example; Example.IDDepField = get_local_id(0); @@ -107,6 +116,13 @@ accumulator++; } while (j < NotThreadID); + int NotThreadIDAssigned = 0; + NotThreadIDAssigned = foo(0) * 2; + + for (int i = 0; i < NotThreadIDAssigned; i++) { + accumulator++; + } + struct { int NotIDDepField; } Example; Example.NotIDDepField = foo(0);